Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Utilities/OS.cpp copilot/add-rtnode-configuration-options (9529fa8a) Text, 10.06 KB

Tff7b72#Tff7b72include T8b949e"OS.h"

Tff7b72#Tff7b72include T8b949e"../Type.h"
Tff7b72#Tff7b72include T8b949e"../Log.h"

Tff7b72#Tff7b72if defined(ESP32)
Tff7b72#Tff7b72include T8b949e<esp_heap_caps.h>
Tff7b72#Tff7b72endif

Tff7b72using Tff7b72namespace T7ee787RNSTb4b4b4;
Tff7b72using Tff7b72namespace T7ee787RNSTff7b72:Tff7b72:T7ee787UtilitiesTb4b4b4;


Tff7b72#Tff7b72if defined(RNS_USE_ALLOCATOR)

Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
Tff7b72#Tff7b72if defined(ESP32)
T8b949e//#define BUFFER_SIZE 1024 * 80
Tff7b72#Tff7b72define BUFFER_SIZE 0
Tff7b72#Tff7b72define BUFFER_FRACTION 0.8
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
T8b949e//#define BUFFER_SIZE 1024 * 80
Tff7b72#Tff7b72define BUFFER_SIZE 0
Tff7b72#Tff7b72define BUFFER_FRACTION 0.8
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define BUFFER_SIZE 1024 * 1000
Tff7b72#Tff7b72define BUFFER_FRACTION 0
Tff7b72#Tff7b72endif

Tffa657bool Te6edf3_tlsf_init Tff7b72= Tffa657falseTb4b4b4;
T8b949e//char _tlsf_msg[256] = "";
Tffa657size_t Te6edf3_buffer_size Tff7b72= Te6edf3BUFFER_SIZETb4b4b4;
Tffa657size_t Te6edf3_contiguous_size Tff7b72= T79c0ff0Tb4b4b4;

T8b949e/*static*/ T8b949e//tlsf_t OS::_tlsf = tlsf_create_with_pool(malloc(1024 * 1024), 1024 * 1024);
T8b949e/*static*/ Te6edf3tlsf_t Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72= Tffa657nullptrTb4b4b4;
Tff7b72#Tff7b72endif

Tffa657uint32_t Te6edf3_new_count Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_new_fault Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint64_t Te6edf3_new_size Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_delete_count Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_delete_fault Tff7b72= T79c0ff0Tb4b4b4;
Tffa657size_t Te6edf3_min_size Tff7b72= T79c0ff0Tb4b4b4;
Tffa657size_t Te6edf3_max_size Tff7b72= T79c0ff0Tb4b4b4;

T8b949e// CBA Added attribute weak to avoid collision with new override on nrf52
Tffa657voidTff7b72* Tff7b72operator Tff7b72newTb4b4b4(Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
T8b949e//__attribute__((weak)) void* operator new(size_t size) {
Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
T8b949e//if (OS::_tlsf == nullptr) {
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_tlsf_initTb4b4b4) Tb4b4b4{
Te6edf3_tlsf_init Tff7b72= Tffa657trueTb4b4b4;
Tff7b72#Tff7b72if defined(ESP32)
T8b949e// Runtime PSRAM detection — works on boards with or without PSRAM.
T8b949e// Boards with PSRAM (e.g. V4 ESP32-S3FH4R2) get TLSF pool in SPIRAM,
T8b949e// freeing internal SRAM for WiFi/LoRa/stack.
T8b949e// Boards without PSRAM (e.g. V3 ESP32-S3FN8) skip TLSF entirely and
T8b949e// use plain malloc() from internal SRAM — the ~170 KB heap is too small
T8b949e// to dedicate to a TLSF pool while still running WiFi/LoRa/FreeRTOS.
Tffa657size_t Te6edf3psram_size Tff7b72= Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657voidTff7b72* Te6edf3raw_buffer Tff7b72= Tffa657nullptrTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3psram_size Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
T8b949e// PSRAM available — allocate TLSF pool from SPIRAM
Tffa657size_t Te6edf3align Tff7b72= Te6edf3tlsf_align_sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_contiguous_size Tff7b72= Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocPsramTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffPSRAM detected: %u bytes total, %u bytes max contiguousTa5d6ff"Tb4b4b4, Te6edf3psram_sizeTb4b4b4, Te6edf3_contiguous_sizeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_buffer_size Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_buffer_size Tff7b72= Tb4b4b4(Te6edf3_contiguous_size Tff7b72* T79c0ff4Tb4b4b4) Tff7b72/ T79c0ff5Tb4b4b4;
Tb4b4b4}
Te6edf3_buffer_size Tff7b72&Tff7b72= Tff7b72~Tb4b4b4(Te6edf3align Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3raw_buffer Tff7b72= Te6edf3heap_caps_aligned_allocTb4b4b4(Te6edf3alignTb4b4b4, Te6edf3_buffer_sizeTb4b4b4, Te6edf3MALLOC_CAP_SPIRAMTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e// No PSRAM — skip TLSF, all allocations go through malloc()
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffNo PSRAM detected (%u bytes internal heap free), TLSF disabledTa5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
Te6edf3_contiguous_size Tff7b72= Te6edf3dbgHeapFreeTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffcontiguous_size: %uTa5d6ff"Tb4b4b4, Te6edf3_contiguous_sizeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_buffer_size Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_buffer_size Tff7b72= Tb4b4b4(Tffa657size_tTb4b4b4)Tb4b4b4(Te6edf3_contiguous_size Tff7b72* Te6edf3BUFFER_FRACTIONTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// For NRF52 round to kB
Te6edf3_buffer_size Tff7b72= Tb4b4b4(Tffa657size_tTb4b4b4)Tb4b4b4(Te6edf3_buffer_size Tff7b72/ T79c0ff1024Tb4b4b4) Tff7b72* T79c0ff1024Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffbuffer_size: %uTa5d6ff"Tb4b4b4, Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
Tffa657voidTff7b72* Te6edf3raw_buffer Tff7b72= Te6edf3mallocTb4b4b4(Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Te6edf3_buffer_size Tff7b72= Tb4b4b4(Tffa657size_tTb4b4b4)Te6edf3BUFFER_SIZETb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffbuffer_size: %uTa5d6ff"Tb4b4b4, Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
Tffa657voidTff7b72* Te6edf3raw_buffer Tff7b72= Te6edf3mallocTb4b4b4(Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3raw_buffer Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ff-- allocation for tlsf FAILEDTa5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e//strcpy(_tlsf_msg, "-- allocation for tlsf FAILED!!!");
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if 1
Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72= Te6edf3tlsf_create_with_poolTb4b4b4(Te6edf3raw_bufferTb4b4b4, Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
T8b949e//if (OS::_tlsf == nullptr) {
T8b949e// sprintf(_tlsf_msg, "initialization of tlsf with align=%d, contiguous=%d, size=%d FAILED!!!", tlsf_align_size(), _contiguous_size, _buffer_size);
T8b949e//}
T8b949e//else {
T8b949e// sprintf(_tlsf_msg, "initialization of tlsf with align=%d, contiguous=%d, size=%d SUCCESSFUL!!!", tlsf_align_size(), _contiguous_size, _buffer_size);
T8b949e//}
Tff7b72#Tff7b72else
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffraw_buffer: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4(Tffa657longTb4b4b4)Te6edf3raw_bufferTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffalign_size: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4(Tffa657longTb4b4b4)Te6edf3tlsf_align_sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657voidTff7b72* Te6edf3aligned_buffer Tff7b72= Tb4b4b4(Tffa657voidTff7b72*Tb4b4b4)Tb4b4b4(Tb4b4b4(Tb4b4b4(Tffa657size_tTb4b4b4)Te6edf3raw_buffer Tff7b72+ Tb4b4b4(Te6edf3tlsf_align_sizeTb4b4b4(Tb4b4b4) Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72& Tff7b72~Tb4b4b4(Te6edf3tlsf_align_sizeTb4b4b4(Tb4b4b4) Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffaligned_buffer: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4(Tffa657longTb4b4b4)Te6edf3aligned_bufferTb4b4b4)Tb4b4b4;
Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72= Te6edf3tlsf_create_with_poolTb4b4b4(Te6edf3aligned_bufferTb4b4b4, Te6edf3BUFFER_SIZETff7b72-Tb4b4b4(Tffa657size_tTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3aligned_buffer Tff7b72- Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3raw_bufferTb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//tlfs = tlsf_create_with_pool(aligned_buffer, buffer_size--(size_t)((uint32_t)aligned_buffer - (uint32_t)raw_buffer));
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ff-- initialization of tlsf FAILEDTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72+Tff7b72+Te6edf3_new_countTb4b4b4;
Te6edf3_new_size Tff7b72+Tff7b72= Te6edf3sizeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72< Te6edf3_min_size Tff7b72|Tff7b72| Te6edf3_min_size Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3_min_size Tff7b72= Te6edf3sizeTb4b4b4;
Tb4b4b4}
T8b949e//if (size > _max_size) {
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72< T79c0ff4192 Tff7b72&Tff7b72& Te6edf3size Tff7b72> Te6edf3_max_sizeTb4b4b4) Tb4b4b4{
Te6edf3_max_size Tff7b72= Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tffa657voidTff7b72* Te6edf3pTb4b4b4;
Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
Tff7b72if Tb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72!Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
T8b949e//TRACEF("--- allocating memory from tlsf (%u bytes)", size);
Te6edf3p Tff7b72= Te6edf3tlsf_mallocTb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsfTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4;
T8b949e//TRACEF("--- allocated memory from tlsf (%u bytes) (addr=%lx)", size, p);
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e//TRACEF("--- allocating memory (%u bytes)", size);
Te6edf3p Tff7b72= Te6edf3mallocTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4;
T8b949e//TRACEF("--- allocated memory (%u bytes) (addr=%lx)", size, p);
Tff7b72+Tff7b72+Te6edf3_new_faultTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
T8b949e//TRACEF("--- allocating memory (%u bytes)", size);
Te6edf3p Tff7b72= Te6edf3mallocTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4;
T8b949e//TRACEF("--- allocated memory (%u bytes) (addr=%lx)", size, p);
Tff7b72#Tff7b72endif
Tff7b72return Te6edf3pTb4b4b4;
Tb4b4b4}
T8b949e// CBA Added attribute weak to avoid collision with new override on nrf52
Tffa657void Tff7b72operator Tff7b72deleteTb4b4b4(Tffa657voidTff7b72* Te6edf3pTb4b4b4) Tb4b4b4{
T8b949e//__attribute__((weak)) void operator delete(void* p) {
Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
Tff7b72if Tb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72!Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
T8b949e//TRACEF("--- freeing memory from tlsf (addr=%lx)", p);
Te6edf3tlsf_freeTb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsfTb4b4b4, Te6edf3pTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e//TRACEF("--- freeing memory (addr=%lx)", p);
Te6edf3freeTb4b4b4(Te6edf3pTb4b4b4)Tb4b4b4;
Tff7b72+Tff7b72+Te6edf3_delete_faultTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
T8b949e//TRACEF("--- freeing memory (addr=%lx)", p);
T8b949e//TRACE("--- freeing memory");
Te6edf3freeTb4b4b4(Te6edf3pTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72+Tff7b72+Te6edf3_delete_countTb4b4b4;
Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
T8b949e//if (_delete_count == _new_count) {
T8b949e// TRACE("TLFS deinitializing");
T8b949e// OS::dump_memory_stats();
T8b949e// tlsf_destroy(OS::_tlsf);
T8b949e// OS::_tlsf = nullptr;
T8b949e//}
Tff7b72#Tff7b72endif
Tb4b4b4}

Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
Tffa657uint32_t Te6edf3_tlsf_used_count Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_tlsf_used_size Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_tlsf_free_count Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_tlsf_free_size Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Te6edf3_tlsf_free_max_size Tff7b72= T79c0ff0Tb4b4b4;
Tffa657void Td2a8fftlsf_mem_walkerTb4b4b4(Tffa657voidTff7b72* Te6edf3ptrTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4, Tffa657int Te6edf3usedTb4b4b4, Tffa657voidTff7b72* Te6edf3userTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3usedTb4b4b4) Tb4b4b4{
Te6edf3_tlsf_used_countTff7b72+Tff7b72+Tb4b4b4;
Te6edf3_tlsf_used_size Tff7b72+Tff7b72= Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_tlsf_free_countTff7b72+Tff7b72+Tb4b4b4;
Te6edf3_tlsf_free_size Tff7b72+Tff7b72= Te6edf3sizeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72> Te6edf3_tlsf_free_max_sizeTb4b4b4) Tb4b4b4{
Te6edf3_tlsf_free_max_size Tff7b72= Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffdump_tlsf_statsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_tlsf_used_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_tlsf_used_size Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_tlsf_free_count Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_tlsf_free_size Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_tlsf_free_max_size Tff7b72= T79c0ff0Tb4b4b4;
T8b949e//TRACEF("TLSF Message: %s", _tlsf_msg);
Tff7b72if Tb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsf Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3tlsf_walk_poolTb4b4b4(Te6edf3tlsf_get_poolTb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3_tlsfTb4b4b4)Tb4b4b4, Te6edf3tlsf_mem_walkerTb4b4b4, Tffa657nullptrTb4b4b4)Tb4b4b4;
Te6edf3HEADTb4b4b4(Ta5d6ff"Ta5d6ffTLSF StatsTa5d6ff"Tb4b4b4, Te6edf3LOG_TRACETb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffBuffer Size: %uTa5d6ff"Tb4b4b4, Te6edf3_buffer_sizeTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffContiguous Size: %uTa5d6ff"Tb4b4b4, Te6edf3_contiguous_sizeTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffUsed Count: %uTa5d6ff"Tb4b4b4, Te6edf3_tlsf_used_countTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffUsed Size: %u (%u%% used)Ta5d6ff"Tb4b4b4, Te6edf3_tlsf_used_sizeTb4b4b4, Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_tlsf_used_size Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_buffer_size Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffFree Count: %uTa5d6ff"Tb4b4b4, Te6edf3_tlsf_free_countTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffFree Size: %u (%u%% free)Ta5d6ff"Tb4b4b4, Te6edf3_tlsf_free_sizeTb4b4b4, Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_tlsf_free_size Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_buffer_size Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffMax Free Size: %u (%u%% fragmented)Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3_tlsf_free_max_sizeTb4b4b4, Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(T79c0ff100.0 Tff7b72- Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_tlsf_free_max_size Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3_tlsf_free_size Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif

T8b949e/*static*/ Tffa657void Td2a8ffOS::dump_allocator_statsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3HEADTb4b4b4(Ta5d6ff"Ta5d6ffAllocator StatsTa5d6ff"Tb4b4b4, Te6edf3LOG_TRACETb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffNew Count: %uTa5d6ff"Tb4b4b4, Te6edf3_new_countTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffNew Fault: %uTa5d6ff"Tb4b4b4, Te6edf3_new_faultTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffDelete Count: %uTa5d6ff"Tb4b4b4, Te6edf3_delete_countTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffDelete Fault: %uTa5d6ff"Tb4b4b4, Te6edf3_delete_faultTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffActive Count: %uTa5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3_new_count Tff7b72- Te6edf3_delete_countTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffMin Size: %uTa5d6ff"Tb4b4b4, Te6edf3_min_sizeTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffMax Size: %uTa5d6ff"Tb4b4b4, Te6edf3_max_sizeTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffAvg Size: %uTffea00\nTa5d6ff"Tb4b4b4, Tb4b4b4(Tffa657size_tTb4b4b4)Tb4b4b4(Te6edf3_new_size Tff7b72/ Te6edf3_new_countTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if defined(RNS_USE_TLSF)
Te6edf3dump_tlsf_statsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

Tff7b72#Tff7b72endif T8b949e// RNS_USE_ALLOCATOR


Tffa657size_t Td2a8ffmaxContiguousAllocationTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// Brute-force determine maximum allocation size
T8b949e//const size_t block_size = 256;
Tff7b72const Tffa657size_t Te6edf3block_size Tff7b72= T79c0ff32Tb4b4b4;
Tffa657size_t Te6edf3block_countTb4b4b4;
Tff7b72for Tb4b4b4(Te6edf3block_count Tff7b72= T79c0ff1Tb4b4b4; Tb4b4b4; Te6edf3block_countTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657voidTff7b72* Te6edf3ptr Tff7b72= Te6edf3mallocTb4b4b4(Te6edf3block_count Tff7b72* Te6edf3block_sizeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ptr Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4) Tb4b4b4{
Tff7b72breakTb4b4b4;
Tb4b4b4}
Te6edf3freeTb4b4b4(Te6edf3ptrTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4(Te6edf3block_count Tff7b72- T79c0ff1Tb4b4b4) Tff7b72* Te6edf3block_sizeTb4b4b4;
Tb4b4b4}

T8b949e/*static*/ Te6edf3FileSystem Te6edf3OSTff7b72:Tff7b72:Te6edf3_filesystem Tff7b72= Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4;
T8b949e/*static*/ Tffa657uint64_t Te6edf3OSTff7b72:Tff7b72:Te6edf3_time_offset Tff7b72= T79c0ff0Tb4b4b4;

T8b949e/*static*/ Tffa657size_t Td2a8ffOS::heap_sizeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if defined(ESP32)
Tff7b72return Te6edf3ESPTb4b4b4.Te6edf3getHeapSizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
Tff7b72return Te6edf3dbgHeapTotalTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72return T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

T8b949e/*static*/ Tffa657size_t Td2a8ffOS::heap_availableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if defined(ESP32)
Tff7b72return Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//return ESP.getMaxAllocHeap();
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
Tff7b72return Te6edf3dbgHeapFreeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72return T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

T8b949e/*static*/ Tffa657void Td2a8ffOS::dump_heap_statsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3HEADTb4b4b4(Ta5d6ff"Ta5d6ffHeap StatsTa5d6ff"Tb4b4b4, Te6edf3LOG_TRACETb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if defined(ESP32)
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffHeap size: %uTa5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getHeapSizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffHeap free: %u (%u%% free)Ta5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getHeapSizeTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//TRACEF("Heap free: %u (%u%% free)", xPortGetFreeHeapSize(), (unsigned)((double)xPortGetFreeHeapSize() / (double)xPort * 100.0));
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffHeap min free: %uTa5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getMinFreeHeapTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//TRACEF("Heap min free: %u", xPortGetMinimumEverFreeHeapSize());
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffHeap max alloc: %u (%u%% fragmented)Ta5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocHeapTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(T79c0ff100.0 Tff7b72- Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocHeapTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreeHeapTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e//TRACEF("Heap max alloc: %u (%u%% fragmented)", ESP.getMaxAllocHeap(), (unsigned)(100.0 - (double)ESP.getMaxAllocHeap() / (double)xPortGetFreeHeapSize() * 100.0));
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffPSRAM size: %uTa5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffPSRAM free: %u (%u%% free)Ta5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72? Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getPsramSizeTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4) Tff7b72: T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffPSRAM min free: %uTa5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getMinFreePsramTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ffPSRAM max alloc: %u (%u%% fragmented)Ta5d6ff"Tb4b4b4, Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocPsramTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4) Tff7b72? Tb4b4b4(Tffa657unsignedTb4b4b4)Tb4b4b4(T79c0ff100.0 Tff7b72- Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getMaxAllocPsramTb4b4b4(Tb4b4b4) Tff7b72/ Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3ESPTb4b4b4.Te6edf3getFreePsramTb4b4b4(Tb4b4b4) Tff7b72* T79c0ff100.0Tb4b4b4) Tff7b72: T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_NRF52_ADAFRUIT)
Tff7b72if Tb4b4b4(Te6edf3loglevelTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3LOG_TRACETb4b4b4) Tb4b4b4{
Te6edf3dbgMemInfoTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if defined(RNS_USE_ALLOCATOR)
Te6edf3OSTff7b72:Tff7b72:Te6edf3dump_allocator_statsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.03s